package com.ssy.lingxi.member.merchant.service.web;

import com.ssy.lingxi.common.response.PageData;
import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.MemberTypeIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.RoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.request.UpperMemberIdRoleIdVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.MemberTypeIdAndNameVO;
import com.ssy.lingxi.member.merchant.model.vo.basic.response.UpperMemberShowVO;
import com.ssy.lingxi.member.merchant.model.vo.info.request.*;
import com.ssy.lingxi.member.merchant.model.vo.info.response.*;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberAppraisalPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberCreditComplaintPageQueryVO;
import com.ssy.lingxi.member.merchant.model.vo.lifecycle.response.MemberRecordRectifyVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.request.MemberDetailCreditHistoryPageVO;
import com.ssy.lingxi.member.merchant.model.vo.maintenance.response.*;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdPageVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.request.ValidateIdVO;
import com.ssy.lingxi.member.merchant.model.vo.validate.response.MemberValidateDetailLevelVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * 会员能力 - 会员信息管理查询服务接口
 * @author 万宁
 * @version 2.0.0
 * @date 2020-09-05
 */
public interface IMemberAbilityInfoService {

    /**
     * 获取分页查询页面下拉框内容
     * @param headers Http头部信息
     * @return 下拉框内容
     */
    Wrapper<MemberInfoSearchConditionVO> getPageSearchConditions(HttpHeaders headers);

    /**
     * 分页、模糊查询归属会员列表
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<UpperMemberInfoVO>> pageUpperMembers(HttpHeaders headers, MemberInfoPageVO pageVO);

    /**
     * “申请会员”页面，查询按钮状态和文本
     * @param headers Http头部信息
     * @param conditionVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoApplyButtonVO> getApplyCondition(HttpHeaders headers, MemberApplyConditionVO conditionVO);

    /**
     * “邀请会员”页面，查询按钮状态和文本
     * @param headers Http头部信息
     * @param conditionVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoInviteButtonVO> getInviteCondition(HttpHeaders headers, MemberInviteConditionVO conditionVO);

    /**
     * “申请会员”页面，会员注册资料信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoApplyRegisterDetailVO> getApplyRegisterDetail(HttpHeaders headers, UpperMemberIdRoleIdVO idVO);

    /**
     * “申请会员”页面，会员入库资料信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoApplyDepositDetailVO> getApplyDepositDetail(HttpHeaders headers, UpperMemberIdRoleIdVO idVO);

    /**
     * “申请会员” - 提交
     * @param headers Http头部信息
     * @param subVO 接口参数
     * @return 申请结果
     */
    Wrapper<Void> applyToBeSubMember(HttpHeaders headers, MemberInfoApplyForSubVO subVO);

    /**
     * 获取“修改注册信息”页面，会员注册资料信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoUpdateDetailVO> getMemberRegisterDetail(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 修改会员注册信息
     * @param headers Http头部信息
     * @param detailVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateMemberRegisterDetail(HttpHeaders headers, MemberInfoUpdateRegisterDetailVO detailVO);

    /**
     * 获取“修改入库信息”页面，会员入库资料信息
     * @param headers Http头部信息
     * @param idVO 会员关系Id
     * @return 查询结果
     */
    Wrapper<MemberInfoUpdateDepositDetailQueryVO> getMemberDepositDetail(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 修改会员入库信息
     * @param headers Http头部信息
     * @param detailVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateMemberDepositDetail(HttpHeaders headers, MemberInfoUpdateDepositDetailVO detailVO);

    /**
     * 会员详情 - 会员基本信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoBasicDetailVO> getMemberBasicDetail(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员档案信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoDepositDetailVO> getMemberArchives(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情- 会员档案 - 分页查询考评信息
     * @param headers HttpHeader信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberAppraisalPageQueryVO>> pageMemberAppraisal(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员档案 - 分页查询整改信息
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberRecordRectifyVO>> pageMemberRecordRectify(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员等级信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberValidateDetailLevelVO> getMemberDetailLevel(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员等级信息 - 分页查询交易分获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailLevelHistoryVO>> pageMemberLevelDetailHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员权益信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailRightVO> getMemberDetailRight(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员权益信息 - 分页查询会员权益获取记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightHistoryVO>> pageMemberDetailRightHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员权益信息 - 分页查询会员权益使用记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailRightSpendHistoryVO>> pageMemberDetailRightSpendHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * 会员详情 - 会员信用信息
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditVO> getMemberDetailCredit(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用信息 - 交易评价汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditCommentSummaryVO> getMemberDetailCreditTradeCommentSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询交易评论历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailCreditTradeHistoryVO>> pageMemberDetailCreditTradeCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用信息 - 售后评价汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditCommentSummaryVO> getMemberDetailCreditAfterSaleCommentSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询售后评论历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberDetailCreditAfterSaleHistoryVO>> pageMemberDetailCreditAfterSaleCommentHistory(HttpHeaders headers, MemberDetailCreditHistoryPageVO pageVO);

    /**
     * 会员详情 - 会员信用 - 投诉汇总
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberDetailCreditComplainSummaryVO> getMemberDetailCreditComplainSummary(HttpHeaders headers, ValidateIdVO idVO);

    /**
     * 会员详情 - 会员信用 - 分页查询投诉历史记录
     * @param headers Http头部信息
     * @param pageVO 接口参数
     * @return 查询结果
     */
    Wrapper<PageData<MemberCreditComplaintPageQueryVO>> pageMemberDetailCreditComplainHistory(HttpHeaders headers, ValidateIdPageVO pageVO);

    /**
     * “增加会员角色”功能，查询上级会员列表
     * @param headers Http头部信息
     * @return 查询结果
     */
    Wrapper<UpperMemberShowVO> getUpperMemberInfo(HttpHeaders headers);

    /**
     * “增加会员角色”功能，查询会员类型列表
     * @param headers Http头部信息
     * @param memberId 会员id
     * @return 查询结果
     */
    Wrapper<List<MemberTypeIdAndNameVO>> getMemberTypeList(HttpHeaders headers, Long memberId);

    /**
     * “增加会员角色”功能，根据会员类型Id查询角色列表
     * @param headers Http头部信息
     * @param idVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoRoleListVO> getRoleListByMemberType(HttpHeaders headers, MemberTypeIdVO idVO);

    /**
     * “增加会员角色”功能，会获取员注册资料信息
     * @param headers Http头部信息
     * @param roleIdVO 接口参数
     * @return 查询结果
     */
    Wrapper<MemberInfoUpdateDetailByRoleVO> getMemberRegisterDetailAfterAddRole(HttpHeaders headers, RoleIdVO roleIdVO);

    /**
     * “增加会员角色”功能，提交注册资料并新增角色
     * @param headers Http头部信息
     * @param addRoleVO 接口参数
     * @return 新增结果
     */
    Wrapper<Void> addMemberRole(HttpHeaders headers, MemberInfoAddRoleVO addRoleVO);
}
